实用软件工程的核心原则
导读:
在正确的时间,使用正确的技术选型,是如何影响开发和业务选择的?Shift.com的工程副总裁与CTO Karan Gupta 详细解释了实践“实用工程”如何对软件产品和业务效率产生的巨大影响。
实用软件工程指的是所构建技术对业务产生比较大的影响。
本文阐述关于在正确的时间以正确的成本,使用正确的技术解决方案。关于考虑实际问题优先级的策略方法。
如果你是CTO或是软件工程领导者,我知道你一定是在严格的资源限制和竞争中开展工作的。
幸运的是,运用以下原则将节省你和团队的时间、金钱和精力,增加组织成功的可能性。
它们按重要性降序排列。我们可以在它们之间运用常识,找到更好的平衡:
四个 F: 快速(Fast) > 功能(Function) > 形式(Form) > 构造(Fabrication)
快速
对于大多数团队来说,最重要的是速度文化。它能够激发主人翁意识、果断与创造力。
A、快速完成你的工作,快速思考,果断行动并有结果。
尽快让我得到想要的东西。客户体验应该比其它任何人都快,包括购买与客户服务。
B、网站和应用程序保持高性能
C、用户体验(UX)应该感觉快速且没有障碍
构建有影响力的功能
A、建立真正重要的功能,无它。
B、冗长会扼杀参与度。在与客户以及内部沟通时,平衡文字和图片。
使用愉悦
A、让界面更好看很重要,但不必要。勿以牺牲上面讲的为代价。
B、少即是多。减少认知负荷,减少冗长。
内在美好
A、过程很重要。摆脱阻碍自己的功能。
B、编写整洁的代码。需求文档(Project Requirements )应该是可描述性的,要尊重审稿人的时间。较小的 PR 可以更快地审查、测试与推动产品执行。
C、快速突破完全没有问题,但它们仍应该保持优雅。在待办事项列表中包含一个完整故事,其中包含推理和步骤,以获得更好的长期解决方案。
D、牢记基础设施的成本
E、为每个人提供改进工具
现在,我们已经厘清了要点,以下来做详细介绍。
原则 #1:快速
快速比添加一堆功能更重要。
即便你的网站或应用程序不具备市场所需的全部功能,但如果它具备的速度很快,你将拥有不断回来的满意用户。
在两个方面建议,可以让快速成为团队核心价值观的一部分:
应用程序/网页的性能
软件的交付速度
你决定开发的功能,首先确保其性能达到所需标准。接着研究用户期望的性能水平,并在合理的努力范围内尽可能接近。然后检查不同的浏览器和设备兼容性。模拟用户的不同网络带宽。如果 75% 的用户使用移动网络,那么这应该是团队的主测试平台,而不是自己的 28 核 Macbook Pro。
如果用户必须等待一些需要时间的东西,不要无限投入。用户也很聪明,他们知道延迟加载是一个事实。如果你让用户了解应用程序在幕后所做的事情,他们也会愿意与你建立并创造更多的参与度。
足够好并推出,比几乎完美但仍然没有做完要好
交付速度,是整个团队的核心原则。其中成员角色包括工程师、PM、UX 和 DevOps。如果做到了,就可以让团队生出更多创新想法,从而更快地推出解决方案。
管理者应该能让大家能够探索可以匹配或集成的解决方案,而不是重新发明轮子。
习惯于快速启动的团队,享受不断推出影响底线东西的满足感。它使客户满意,发展业务并发展更多的自豪感。
原则#2:功能
这是对用户说“我希望你的应用也这样做”的回答。一旦掌握了性能和交付速度,然后思考想要为客户群解决以及不想解决哪些问题 。
正确的功能大于酷炫的用户界面。
如果提供给了用户需要的关键功能,他们宁愿接受界面中的缺点。提供正确的工具并确保它们运行良好(快速),比它们看起来有点原始更为重要。
我们来对比
GitHub 网站设计精良,但功能却是第一位的。它带有对比度的基本调色板、有意义的图标、看起来像按钮的按钮、没有花哨的背景、没有年龄超过30岁以上无法阅读的华丽字体。它的设计具有完成工作所需的正确功能,并且目标是支持它们。
你添加的任何功能都是自己和继任者永远要使用的东西。你可能只需要几天时间就可以放入新的功能,但它需要你更多的关怀。
在短短几年内,预计它将成为只有少数人理解的技术债务、传奇或者遗留代码的一部分,没有人愿意碰它(因为人们不知道还有什么可能会破坏)。
需要大家仔细选择,什么该做,什么不该做。
原则#3:形式
只有当我们提供了正确的功能并且速度很快时,我们才需要考虑提升它的样式和感觉。我和下一个人都一样欣赏一个漂亮的应用程序,但在设计时考虑这些:
每一页都美观吗?持续的?
我们正在分散眼睛的注意力吗?
如何减少认知负荷?
CTA 和表单域是否放置在用户期望的位置?
表单字段是否具有正确的输入类型,手机上显示键盘合适吗?
应用程序是否可以扩展到不同尺寸的设备?
对于不同能力的人,设计是否按预期工作?
当我们的产品在非洲推出时,它会起作用吗?
人们喜欢外观漂亮、体验良好的产品。设计最重要的作用是增强能够使用产品提供的所有超快速功能的体验。一个重要方面是确保界面可用,不应该为了美观而牺牲可用性。如果大多数人希望“设置”图标位于右上角,那就不要将其放在左上角或者子菜单下、用户个人资料图像等等。
举个功能与设计权衡的实例:
假设你的桌面用户需要从几个选项中选择,下拉菜单是不错的选择,并且每个设备上的浏览器都支持它。
一个团队虽然非常关心其用户,在选项旁边放置了一个非常漂亮的 JavaScript 下拉菜单。与默认的 <select> 相比,新的下拉列表无疑看起来很酷,而且只需要一个额外的 js 库和一些自定义 css 就可以将它组合在一起。可是它有一个被忽视的缺点:不能用于键盘操作。
而使用原生下拉菜单,用户使用键盘可快速选择一个选项并进入下一步。而现在需要多花 3 秒时间,必须将手从键盘上移开,并使用触控板进行导航。现在业务增长了,有 5 个仓库的 100 名操作员每天使用此下拉菜单 1000 次。我们这个可爱的下拉菜单对业务产生了数千小时的负面影响。
我们喜欢重用组件,想象一下同一个下拉元素在整个站点中要使用 16 次。你能计算金钱吗?
除非有充分的理由,否则请使用原生元素。它们在任何地方都可以工作,可以支持不同能力的人,花费更少的实施成本。
因此,不使用原生UI组件时要深思熟虑。
在产品中加入令人愉快的时刻、小动画、自动填充和智能默认设置,以减少摩擦并展示同理心和乐趣的元素。
在不牺牲这两个原则的前提下,然后再让产品设计随心所欲。
再来看
一旦人们把这两件事做好了,设计就真的让产品脱颖而出,创造了一种值得谈论的体验。
你可以感受到投入其中,增加更多的关怀与思考。
原则#4:制造
最后的阶段:制造,即发明与组装。
我是从半导体制造的术语中选用了这个术语:它开启了我们现在都在参与的技术和数字化革命。
制造运行软件的组件是一个极其复杂,且需要精心管理的过程。在软件工程的背景下,最重要的是要考虑将产品组合在一起,它所需的工具和相关规则。
制造是关于在使用户与之交互的位置上投入了多少关怀和关注。它是关于产品、设计、工程师、QA、DevOps 和管理者的沟通方式,这里与编码指南、公关质量、关于自述文档的编写程度有关。
我们常注意机器的内部,它就会在未来几年内工作得很好。而在软件中,这转化为我们的思考能做到多好,我们是否能及时交付,以及其他人能否持续对它维护。
开发者们如何构建系统、代码质量以及如何运行日常任务都很重要。制造工艺相当重要,需要把这些事情加入团队的手册之中。
需要记住的一些事项:
现在一个快速的黑客攻击可能需要花费 100 万美元,在 4 年内得到修复。
不要重新发明轮子。利用现成的软件避免处理样板型问题,并将精力集中在使你与众不同的地方。
从经过验证的流程中学习,并使用标准化工具。
接受软件永远不会完成的现状:它始终处于不断重构和改进的状态。
为组织良好的团队腾出时间,在平衡日常工作的同时消除技术债务,但也不必过度恐慌:这些人将推动整个组织向前发展。这些团队为其它人树立榜样。
送给现在和未来的技术领导者。
作者:卡兰·古普塔
Shift Technologies, Inc.工程高级副总裁,CTO。
Karan 是一位以产品为导向的技术高管,曾在 2 次 IPO 的领导团队中任职。他喜欢开发和领导高效的分布式团队。
编译:场长
原文:https://www.heroku.com/podcasts/codeish/principles-of-pragmatic-engineering